package org.future.persistent.table;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * 数据库表信息
 * @author dycc
 * @date 2009-12-30 下午06:00:01
 */
public class DBTable {
    // 表名
    private String name;
    // 主键 [存储数据库中对应的字段名称]
    private String[] ids;
    // 所有字段信息
    private final Map<String, DBField> fields = new HashMap<String,DBField>();
    // 大字段类型
    private final Map<String, DBField> largeFields = new HashMap<String,DBField>();
    
    /**
     * 构造函数
     */
    public DBTable(){
        this("");
    }
    /**
     * 构造函数
     * @param name
     */
    public DBTable(String name){
        this(name,"");
    }
    /**
     * 构造函数
     * @param name
     * @param id
     */
    public DBTable(String name,String id){
        this.name = name;
        this.ids = new String[]{id};
    }
    /**
     * 构造函数
     * @param name
     * @param ids
     */
    public DBTable(String name,String[] ids){
        this.name = name;
        this.ids = ids;
    }
    
    //////////////////// methods ////////////////////////
    /**
     * 表名
     */
    public String getName(){
        return name;
    }
    /**
     * set 表名
     * @param name
     */
    public void setName(String name){
        this.name = name.trim();
    }
    /**
     * 主键
     */
    public String[] getIds(){
        return ids;
    }
    /**
     * set 主键
     * @param id
     */
    public void setId(String id){
        this.ids = new String[]{id};
    }
    /**
     * 判断当前参数是否为主键
     * @param key
     * @return
     */
    public boolean isKeyField(String key){
        for(String id : ids){
            if(id.equalsIgnoreCase(key)){
                return true;
            }
        }
        return false;
    }
    /**
     * set 主键
     * @param ids
     */
    public void setIds(String[] ids){
        if(ids == null || ids.length < 1){
            throw new RuntimeException("主键不能设置为空");
        }
        String[] tempIds = new String[ids.length];
        for(int i=0;i<ids.length;i++){
            tempIds[i] = ids[i];
        }
        this.ids = tempIds;
    }
    /**
     * 返回所有字段
     */
    public Map<String,DBField> getFields(){
        return fields;
    }
    /**
     * 返回指定的字段
     * @param fieldName : 数据库中的字段名称
     * @return
     */
    public DBField getField(String fieldName){
        Iterator<DBField> it = fields.values().iterator();
        while(it.hasNext()){
            DBField fd = it.next();
            if(fieldName.equalsIgnoreCase(fd.getName())){
                return fd;
            }
        }
        return null;
    }
    /**
     * 增加一个字段
     * @param key :databean 中的属性名称
     * @param val :数据库中的字段
     */
    public void addField(String key,DBField value){
        fields.put(key, value);
    }
    /**
     * 删除一个字段
     * @param key :databean 中的属性名称
     * @return
     */
    public DBField removeField(String key){
        return fields.remove(key);
    }
    /**
     * 返回所有的大字段
     * @return
     */
    public Map<String,DBField> getLargeFields(){
        return largeFields;
    }
    /**
     * 增加一个大字段
     * @param key   :databean 中的属性名称
     * @param value :数据库中的字段
     */
    public void addLargeField(String key, DBField value) {
        largeFields.put(key, value);
    }
}
